<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
  <link rel="Stylesheet" type="text/css" href=
  "../../default.css" />
  <meta http-equiv="Content-Type" content=
  "text/html; charset=utf-8" />

  <title>Алгоритмы шифрования серийных номеров</title>
  <style type="text/css">
  </style>
</head>

<body>
  <h1>Алгоритмы шифрования серийных номеров</h1>

  <p>Надежность ключей системы лицензирования основывается на
  применении асимметричных алгоритмов шифрования. В текущей версии
  реализован алгоритм RSA с длиной ключа от 1024 до 16384 бит. В
  будущих версиях планируется добавление других алгоритмов,
  основанных на ECC, а также схем, совмещающих симметричные и
  асимметричные шифры.</p>

  <p>Используемый алгоритм уникален для каждого продукта. Ключи,
  созданные с одним алгоритмом, не подойдут к другому, поэтому
  смена алгоритмов после создания хоть одной лицензии не
  допускается. Модуль защиты, располагающийся в защищаемой
  программе, "знает" каким алгоритмом должен быть зашифрован
  серийный номер и не примет ключ, созданный другим алгоритмом или
  тем же алгоритмом, но с другими параметрами (скажем, с другой
  длиной ключа).</p>

  <h3>Алгоритм RSA</h3>

  <p>Шифрование серийного номера алгоритмом RSA происходит по
  следующей схеме:</p>

  <ul>
    <li><strong>Добавление случайных данных в начало
    номера</strong> - метод основывается на RFC2313, однако
    реализация немного отличается от описаной там. В начало
    серийного номера добавляютя байты: 00 02 NN...NN 00, где NN..NN
    - от 8 до 16 случайных ненулевых байт. Количество байт
    выбирается случайным, однако принимается во внимание длина
    серийного номера и максимальная вместительность ключа.</li>

    <li><strong>Добавление случайных данных в конец номера</strong>
    - окончательное количество байт в серийном номере должно
    равняться количеству бит в ключах алгоритма, деленному на 8.
    Серийный номер дополняется до этого числа байт случайными
    данными. В результате получается следующий формат серийного
    номера: 00 02 NN..NN 00 DD..DD MM..MM, где NN - набор случайных
    ненулевых байтов, DD - исходный серийный номер, MM -набор
    случайных байтов (в т.ч. и нулевых). Суммарная длина
    последовательности должна равняться количеству бит,
    применяемому в алгоритме, деленному на 8.</li>

    <li><strong>Шифрование</strong> - производится по стандатной
    схеме, реализованной во многих библиотеках, работающих с
    большими числами. Генератор на PHP содержит всю необходимую
    информацию в открытом виде.</li>

    <li><strong>Упаковка</strong> - полученный после шифрования
    набор байт кодируется в base-64 - это и есть серийный номер,
    который отправляется покупателю.</li>
  </ul><br />
  <br />
  <br />
  <br />
  <br />
  <hr noshade="noshade" size="1" />

  <div align="center">
    © 2006-2015 Copyright VMProtect Software
  </div>
</body>
</html>
